package org.basis.algorithm.lru;

import java.util.Map;

/**
 * lfu算法实现
 * lfu: 每次淘汰访问频次最低的数据（如果某几个数据访问频次一样，那么需要按照时间先后关系来淘汰）
 *
 * @author Mr_wenpan@163.com 2022/01/02 15:59
 */
public class MyLfu {

    Map<Integer, Node> countMap;
    Map<String, Node> dataMap;
    /**
     * 最小访问次数
     */
    int minCount = 1;
    int limit;

    public MyLfu(int limit) {
        if (limit <= 0) {
            throw new RuntimeException("limit can not < 0");
        }
        this.limit = limit;
    }

    public String get(String key) {

        return key;
    }

    public String put(String key, String value) {

        if (dataMap.get(key) == null) {
            // 超出容量限制，说明需要移除一个元素
            if (dataMap.size() >= limit) {
                // 先获取访问频次最小的节点
                Node node = countMap.get(minCount);
                minCount = 1;
                dataMap.remove(node.key);
            }
            Node node = new Node(key, value);
        } else {

        }


        return value;
    }

    public boolean delete(String key) {

        return true;
    }

    class Node {
        String key;
        String value;

        public Node(String key, String value) {
            this.key = key;
            this.value = value;
        }
    }

}
